/**
 * <h3>SchoolMapper</h3>
 * <p> 接口名：SchoolMapper</p>
 *
 * <h3>功能描述</h3>
 * <p> 学校信息的数据访问层接口，定义了对学校表的增删改查操作方法。</p>
 * <p> 该接口继承自 MyBatis Plus 的 BaseMapper，扩展了基于业务需求的自定义查询方法。</p>
 *
 * <h3>元数据</h3>
 * <ul>
 *    <li> 作者：郭强 </li>
 *    <li> 创建日期：2025年05月06日 21:22:53 </li>
 * </ul>
 *
 * <h3>其他信息</h3>
 * <ul>
 *    <li> 示例代码：{@code @Autowired private SchoolMapper schoolMapper;}</li>
 * </ul>
 *
 * @implSpec 实现了 MyBatis Plus 的 {@link BaseMapper} 接口，并扩展了学校相关的业务方法。
 * @since 1.0.0
 */
package com.dnndo.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dnndo.system.domain.School;
import com.dnndo.system.domain.dto.*;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 学校数据访问层接口
 */
@Mapper
public interface SchoolMapper extends BaseMapper<SchoolDTO> {

    /**
     * 查询所有或符合条件的学校列表
     * @param dto 封装查询条件的 School 对象
     * @return List<School> 符合条件的学校信息列表
     * @see School
     */
    List<School> selectSchoolList(SchoolDTO dto);

    List<School> selectSchoolNameList(SchoolDTO dto);

    /**
     * 根据条件分页查询已收录学校logo列表
     * @param dto 封装查询条件的 School 对象
     * @return List<School> 符合条件的学校信息列表
     * @see School
     */
    List<School> selectSchoolLogoList(SchoolDTO dto);

    /**
     * 根据学校ID查询学校详细信息
     * @param schoolId 学校唯一标识符
     * @return School 学校实体对象
     * @see School
     */
    SchoolDTO selectSchoolListById(Long schoolId);

    /**
     * 根据学校ID更新学校信息
     * @param school 封装更新数据的 School 对象
     * @return int 受影响的记录数（通常为1）
     * @see SchoolDTO
     */
    int updateSchoolById(SchoolDTO school);

    /**
     * 新增一条学校记录
     * @param school 封装新增数据的 School 对象
     * @return int 受影响的记录数（通常为1）
     * @see SchoolDTO
     */
    int insertSchool(SchoolDTO school);

    /**
     * 根据学校ID删除学校记录
     * @param schoolId 学校唯一标识符
     * @return int 受受影响的记录数（通常为1）
     * @see SchoolDTO
     */
    int deleteSchoolById(Integer schoolId);

    /**
     * 根据学校ID下架学校记录
     * @param schoolId 学校唯一标识符
     * @return int 受受影响的记录数（通常为1）
     * @see SchoolDTO
     */
    int downSchoolById(Integer schoolId);


    /**
     * 判断学校名称是否存在
     * @param schoolName 封装新增数据的 School 对象
     * @return int 受影响的记录数（通常为1）
     * @see int
     */
    int existsBySchoolName(String schoolName);

//以下为接口
    /**
     * 查询中文的主管部门列表
     *
     * @return 包含中文主管部门名称的列表
     */
    List<String> selectCompetentDepartmentListZh();


    /**
     * 查询中文的办学层次列表
     *
     * @return 包含中文办学层次名称的列表
     */
    List<String> selectLevelListZh();

    /**
     * 查询中文的院校特征列表
     *
     * @return 包含中文院校特征名称的列表
     */
    List<String> selectCharacteristicsListZh();

    /**
     * 查询中文的院校特征列表
     *
     * @return 包含英文办学层次名称的列表
     */
    List<String> selectCharacteristicsListEn();

    /**
     * 查询英文的主管部门列表
     *
     * @return 包含英文主管部门名称的列表
     */
    List<String> selectCompetentDepartmentListEn();

    /**
     * 查询英文的办学层次列表
     *
     * @return 包含英文办学层次名称的列表
     */
    List<String> selectLevelListEn();

    /**
     * 查询省份城市（中文）
     * @return 省份城市列表
     */
    List<ProvinceDTO> selectProvinceCityGroupedByProvinceZhVO();

    /**
     * 查询省份城市（英文）
     * @return 省份城市列表
     */
    List<ProvinceDTO> selectProvinceCityGroupedByProvinceEnVO();

    /**
     * 查询校徽收录统计（中文）
     * @return 徽收录统计
     */
    SchoolStatisticsDTO selectSchoolStatistics();

    /**
     * 查询校徽收录（中文）
     * @return 校徽收录列表
     */
    List<SchoolOfficialDTO> selectSchoolLogoListZh(SchoolOfficialDTO dto);

    /**
     * 查询校徽收录（中文）
     * @return 校徽收录列表
     */
    List<SchoolOfficialDTO> selectSchoolLogoListEn(SchoolOfficialDTO dto);

    // 中文查询
    List<ApiSchoolDTO> selectSchoolApiZh(ApiSchoolDTO dto);

    // 英文查询
    List<ApiSchoolDTO> selectSchoolApiEn(ApiSchoolDTO dto);

    SchoolDTO selectSchoolListByToName(SchoolDTO selschoolDTO);

//    获取校徽总数
    int countSchoolBadgeOfficial(SchoolOfficialDTO dto);
}
